import axios from "axios";
import { Message } from "element-ui";

// 基础配置
const service = axios.create({
    baseURL: 'http://47.110.63.8:8081/',
    timeout: 30000,
    // 移除默认Content-Type，以便FormData自动设置boundary
    // headers: {
    //     "Content-Type": "application/json;charset=UTF-8"
    // },
    withCredentials: false
});

// 请求拦截器
service.interceptors.request.use(
    config => {
        console.log('发送请求:', config.url);
        // 从localStorage获取token
        const token = localStorage.getItem('token');
        if (token) {
            config.headers.Authorization = `Bearer ${token}`;
        }
        return config;
    },
    error => {
        console.error('请求错误:', error);
        return Promise.reject(error);
    }
);

// 导入router
import router from '../router';
import store from '../store';

// 响应拦截器
service.interceptors.response.use(
    res => {
        console.log('收到响应:', res.config.url, res.data);
        // 处理未授权情况
        if (res.data.code === 401) {
            Message.error(res.data.msg || '登录已过期，请重新登录');
            // 清除登录状态
            store.dispatch('auth/logout');
            // 重定向到登录页
            router.replace({
                path: "/login",
                query: { redirect: router.currentRoute.fullPath },
            });
        }
        return res.data;
    },
    error => {
        console.error('响应错误:', error);
        // 处理HTTP错误
        if (error.response) {
            if (error.response.status === 401) {
                Message.error('登录已过期，请重新登录');
                // 清除登录状态
                store.dispatch('auth/logout');
                // 重定向到登录页
                router.replace({
                    path: "/login",
                    query: { redirect: router.currentRoute.fullPath },
                });
            } else {
                Message.error(error.response.data.message || '请求失败');
            }
        } else {
            Message.error('网络错误，请检查您的网络连接');
        }
        return Promise.reject(error);
    }
);

// 封装请求方法
const http = {
    get: (url, params) => {
        console.log('GET请求:', url, params);
        return service.get(url, { params });
    },
    post: (url, data) => {
        console.log('POST请求:', url, data);
        return service.post(url, data);
    }
};

export default http;
